<?php
/*Hachim
 * Pour charger des layouts par module,
 * ou faire un système de multitemplating
 * Ce plugin permet aussi des charger dynamiquement les models du module courant
 */
class Wmp_Loader_ModelAndLayout extends Zend_Controller_Plugin_Abstract {
	protected $_moduleLayouts;
	public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {   	
    	$config = Zend_Registry::get('config');
    	$registred_template = zend_registry::get('template');
    	$layoutName = zend_registry::get('layoutName');
    	
    	if($registred_template)//en priorité dans la bdd. Si le module a un template enregistré
    	{ 
    		$layoutpath=$config->path->public->dir.'/templates/'.$registred_template;    		
    	}
    	else 
    	{
    		//si le module a un layout dans son dossier views/layouts/
    		$internal_layout = $config->path->modules->dir.'/'.$request->getModuleName().'/views/layouts/'.$config->layouts->name.'.'.$config->layouts->suffix;
    		if(file_exists($internal_layout))
    			$layoutpath = $config->path->modules->dir.'/'.$request->getModuleName().'/views/layouts';
    		else //le module n'a pas de layouy interne, je lui affecte le layout par defaut	
    			$layoutpath=$config->path->public->dir.'/templates/'.$config->defaultTemplate;    			
    	}    	
    	$this->_moduleLayouts[$request->getModuleName()] = array(
			'layoutPath' => $layoutpath,
			'layout' => $layoutName
		);
    }
	
	public function preDispatch(Zend_Controller_Request_Abstract $request){
		if(isset($this->_moduleLayouts[$request->getModuleName()])){
			$config = $this->_moduleLayouts[$request->getModuleName()];
			$layout = Zend_Layout::getMvcInstance();
			if($layout->getMvcEnabled()){
				$layout->setLayoutPath($config['layoutPath']);
				if($config['layout'] !== null){
					$layout->setLayout($config['layout']);
				}
				$configSite = Zend_Registry::get('config');
				$layout->setViewSuffix($configSite->layouts->suffix);
			}
		}
		
		//Pour charger automatiquement les models d'un module
		$modelspath=$configSite->path->modules->dir.'/'.$request->getModuleName().'/models';
		set_include_path(
		get_include_path().PATH_SEPARATOR.
		$modelspath
		);
		//Zend_Registry::set('action', 'ggg');
	}
}
